using System;
using System.Collections.Generic;
using System.Text;

namespace OPTFleet.OPTFleet {
	public class Planeamento {
		private DateTime data;
		private Motorista motorista;
		private Veiculo veiculo;
        private DateTime horachegada;
		private SortedSet<Entrega> entregas;

        public DateTime Data
        {
            get { return data; }
            set { data = value; }
        }

        public Motorista Motorista
        {
            get { return motorista; }
            set { motorista = value; }
        }

        public Veiculo Veiculo
        {
            get { return veiculo; }
            set { veiculo = value; }
        }

        public DateTime HoraChegada
        {
            get { return horachegada; }
            set { horachegada = value; }
        }

        public SortedSet<Entrega> Entregas
        {
            get
            {
                SortedSet<Entrega> ret = new SortedSet<Entrega>(new Entrega.OrdenarPorHora());
                foreach (Entrega e in entregas)
                    ret.Add(e);
                return ret;
            }
            set
            {
                entregas = new SortedSet<Entrega>(new Entrega.OrdenarPorHora());
                foreach (Entrega e in value)
                    entregas.Add(e);
            }
        }

        public Planeamento()
        {
            this.Data = DateTime.Now;
            this.Motorista = new Motorista();
            this.Veiculo = new Veiculo();
            this.Entregas = new SortedSet<Entrega>(new Entrega.OrdenarPorHora());
            this.HoraChegada = DateTime.Now;
        }

        public Planeamento(DateTime data, Motorista motorista, Veiculo veiculo, DateTime horachegada, SortedSet<Entrega> entregas)
        {
            this.Data = data;
            this.Motorista = motorista;
            this.Veiculo = veiculo;
            this.Entregas = entregas;
            this.HoraChegada = horachegada;
        }

        public void AddEntrega(Entrega e)
        {
            entregas.Add(e);
        }

        public void RemoveEntrega(Entrega e)
        {
            entregas.Remove(e);
        }

        public SortedSet<Entrega> ShallowEntregas
        {
            get { return entregas; }
            set { entregas = value; }
        }

        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("----------------Planeamento-----------------");
            sb.Append("\nData : " + data.ToString());
            sb.Append("\n" + motorista.ToString());
            sb.Append("\n" + veiculo.ToString());
            sb.Append("\nHora chegada : " + horachegada.ToString());
            foreach(Entrega e in entregas)
                sb.Append("\n" + e.ToString());
            sb.Append("\n-------------------------------------------");

            return sb.ToString();
        }

	}

}
